
#include "PersonFinery.h"

using namespace npDecorator;


PersonFinery::PersonFinery() : Person()
{
    this->person = nullptr;
}

PersonFinery::~PersonFinery()
{

}

PersonFinery::PersonFinery(const PersonFinery& cpy) : Person(cpy)
{
    //一般情况，一个对象如果持有动态内存，
    //复制或赋值时，需要深复制
    //当不需要进行深复制时，
    //就出现了这里的情况，

    //const引用cpy，在这里只保证
    //当前函数体内，不改变引用的对象
    //其他地方，比如通过this->person改变cpy引用对象的内容
    //是没有约束的
    this->person = cpy.person;
}

PersonFinery& PersonFinery::operator=(const PersonFinery& asn)
{
    if (this == &asn)
    {
        return *this;
    }
    else
    {
        Person::operator=(asn);
        this->person = asn.person;
    }
}

PersonFinery* PersonFinery::clone() const
{
    return new PersonFinery(*this);
}

void PersonFinery::decorate(Person *person)
{
    this->person = person;
}

void PersonFinery::show() const
{
    if (this->person)
    {
        this->person->show();
    }
}
